﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;

namespace EasyTrader.DataSet
{
    public class ETDataTable : DataTable
    {
        private object m_OpenVal = 0;
        public object OpenVal
        {
            get { return m_OpenVal; }
            set { m_OpenVal = value; }
        }

        public ETDataTable(string a_Name)
            : base(a_Name)
        {
        }

        // 주어진 이름으로 칼럼을 생성한다.
        public void AddColumn(string a_ColumnName)
        {
            Columns.Add(a_ColumnName);
        }

        // 주어진 값들을 행에 추가한다.
        public void AddRow(object[] a_Values)
        {
            Rows.Add(a_Values);
        }

        // 행을 추가한다.
        public void AddRow(DataRow a_DataRow)
        {
            this.Rows.Add(a_DataRow);
        }

        // 열의 총 개수를 가져온다.
        public int GetColumnCount()
        {
            return this.Columns.Count;
        }
        // 행의 총 개수를 가져 옵니다.
        public int GetRowCount()
        {
            return Rows.Count;
        }

        public DataRow GetLastRow()
        {
            if (Rows.Count != 0)
                return this.Rows[Rows.Count - 1];
            else
                return null;
        }

        public bool GetFirstNonZeroVal(string a_ColName, ref double a_OutVal)
        {
            bool result = false;
            for (int i = 0; i < Rows.Count; i++)
            {
                DataRow row = this.Rows[i];
                if (row[a_ColName] == DBNull.Value)
                    return result;
                double val = Convert.ToDouble(row[a_ColName]);
                if (val != 0)
                {
                    a_OutVal = val;
                    result = true;
                }
            }

            return result;
        }

        public virtual void SaveTableToXml()
        {
            if (GetRowCount() == 0)
                return;

            DateTime now = DateTime.Now;
            int year = now.Year;
            int month = now.Month;
            int day = now.Day;
            string fileName = Directory.GetCurrentDirectory();
            string dirName = fileName + "\\XMLData";
            bool exist = Directory.Exists(dirName);
            if (exist == false)
            {
                string msg = dirName + GlobalVar.DirWarnMsg;
                System.Windows.Forms.MessageBox.Show(msg);
                return;
            }
            fileName += "\\XMLData\\";
            fileName += year.ToString() + "_";
            fileName += month.ToString() + "_";
            fileName += day.ToString() + "_";
            fileName += TableName;
            // 기존 파일이 있으면 지워준다.
            if (File.Exists(fileName))
            {
                File.Delete(fileName);
            }
            WriteXml(fileName);
        }

        public virtual void ReadFromXml(DateTime a_DateTime)
        {
            int year = a_DateTime.Year;
            int month = a_DateTime.Month;
            int day = a_DateTime.Day;
            string fileName = year.ToString() + "_";
            fileName += month.ToString() + "_";
            fileName += day.ToString() + "_";
            fileName += TableName;

            string path = Directory.GetCurrentDirectory();
            path += "\\XMLData\\" + fileName;

            // 파일이 없으면 그냥 나온다.
            if (File.Exists(path) == false)
            {
                return;
            }
            // 기존의 데이터를 모두 지웁니다.
            this.Clear();
            // 새로운 데이터를 읽어 온다.
            ReadXml(path);
        }
    }
}
